package com.kingmed.kmss.bpmn.modules.backup.service.impl;

import java.util.List;
import java.util.Map;

import com.kingmed.kmss.bpmn.modules.backup.mapper.BizApprovalDataMapper;
import com.kingmed.kmss.bpmn.modules.backup.model.BizApprovalData;
import com.kingmed.kmss.bpmn.modules.backup.service.BizApprovalDataService;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kingmed.kmss.common.constant.bpmn.BpmnConstant;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;

/**
 * <p>
 * 审批流业务数据记录表 服务实现类
 * </p>
 *
 */
@Service
public class BizApprovalDataServiceImpl extends ServiceImpl<BizApprovalDataMapper, BizApprovalData> implements BizApprovalDataService {

    @Override
    public boolean saveApprovalData(BizApprovalData bizApprovalData) {
        return save(bizApprovalData);
    }

    @Override
    public boolean updateApprovalData(BizApprovalData bizApprovalData) {
        return updateById(bizApprovalData);
    }

    @Override
    public boolean submitApprovalData(Map<String, Object> varMap) {
        String jsonData = MapUtil.getStr(varMap, BpmnConstant.VarKeys.JSON_DATA);
        if(StrUtil.isNotEmpty(jsonData)){
            String bizType = MapUtil.getStr(varMap, BpmnConstant.VarKeys.BIZ_TYPE);
            String bizId = MapUtil.getStr(varMap, BpmnConstant.VarKeys.BIZ_ID);
            String bizKey = MapUtil.getStr(varMap, BpmnConstant.VarKeys.BIZ_KEY);

            BizApprovalData data = getApprovalData(bizType, bizId);
            if(ObjectUtil.isNotNull(data)){
                data.setJsonData(jsonData);
                updateApprovalData(data);
            }else{
                data = new BizApprovalData();
                data.setBizType(bizType);
                data.setBizId(bizId);
                data.setBizKey(bizKey);
                data.setJsonData(jsonData);
                saveApprovalData(data);
            }
        }
        return true;
    }

    @Override
    public BizApprovalData getApprovalData(String bizType, String bizId) {
        QueryWrapper<BizApprovalData> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(BizApprovalData::getBizType,bizType)
                             .eq(BizApprovalData::getBizId,bizId);
        List<BizApprovalData> dataList = list(queryWrapper);
        if(CollUtil.isNotEmpty(dataList)){
            return dataList.get(0);
        }
        return null;
    }
}
